function sfc = snr_setup_sfc_material (sett_sfc, frequency)
    % if ~isfieldempty(sett_sfc, 'material') ...
    % && ~isfieldempty(sett_sfc, 'material_bottom') ...
    % && ~isequaln(sett_sfc.material, sett_sfc.material_bottom)
    %     warning('snr:setup:sfcMaterial', ...
    %       ['Ignoring non-empty "sett.sfc.material";\n'...
    %        'non-empty "sett.sfc.material_bottom" takes precedence.']);
    %     sett_sfc.material = sett_sfc.material_bottom;
    % end
    if ~isempty(sett_sfc.material_middle) ...
    && ( isequal(sett_sfc.fnc_snr_setup_sfc_material, @snr_setup_sfc_material_homogeneous) ...
    ||   isequal(sett_sfc.fnc_snr_setup_sfc_material, @snr_setup_sfc_material_halfspaces) )
        warning('snr:snr_setup_sfc_mat:badFnc', ...
            'Non-empty middle material detected; setting up layered media.');
        sett_sfc.fnc_snr_setup_sfc_material = @snr_setup_sfc_material_layered;
    end
    %sett_sfc.fnc_snr_setup_sfc_material  % DEBUG
    sfc = sett_sfc.fnc_snr_setup_sfc_material (...
        frequency, sett_sfc.material_bottom, ...
        sett_sfc.material_top, sett_sfc.material_middle, sett_sfc);
    if ~isfield(sfc, 'thickness'),  sfc.thickness = [];  end
    %TODO: pre-calculate reflection coefficients sparsely rigourously, then
    % interpolate during eval (hint: change sfc.fnc_get_reflection_coeff)
end
